home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / misc / poolfx92.lzh / POOLFX92.S < prev   
Text File  |  1992-03-04  |  10KB  |  641 lines

  1. ;File name:    POOLFX92.S        Revision date:    1992.03.04
  2. ;Revised by:    Ulf Ronald Andersson    Disassembled:    1992.03.03
  3. ;File purpose:    Source for new poolfix debugged 1992
  4. ;
  5. ;The new poolfix has all the good points of POOLFIX4 & POOLFIX3
  6. ;but eliminates some fatal bugs that those had.
  7. ;
  8. ;The order of the routines has been changed completely to save RAM
  9. ;their content however is mainly the same, but debugged.
  10. ;
  11. ;FX92: all added lines will have a remark headed like this line
  12. ;;;All eliminated lines will remain, preceded by 3 semicolons, like this line
  13. ;
  14.     include    TOS\URAn_SYS.S
  15.     include    TOS\URAn_DOS.S
  16.     include    TOS\URAn_XB.S
  17. ;
  18. ;
  19.     text
  20. ;
  21. ;
  22. startup:
  23. bp    =    startup-$100
  24.     bra    main        ;FX92: new branch, to change order
  25. ;
  26. ;
  27.     XB_define    nu_gemdos,'_OOL'
  28.     move.b    poolfix_flag(pc),d0
  29.     beq.s    L26E
  30.     bsr.s    compact_all_sub
  31. L26E:
  32.     move    USP,a0
  33.     btst    #5,(sp)
  34.     beq.s    L282
  35.     lea    6(sp),a0
  36.     tst    (_longframe).w
  37.     beq.s    L282
  38.     addq    #2,a0
  39. L282:
  40.     move    (a0),d0            ;Pterm0 ?
  41.     beq.s    prepare_flag
  42.     sub    #$31,d0            ;Ptermres ?
  43.     beq.s    prepare_flag
  44.     sub    #$18,d0            ;Mfree ?
  45.     beq.s    prepare_flag
  46.     subq    #1,d0            ;FX92: Mshrink ?  previously ignored !!!
  47.     beq.s    prepare_flag
  48.     subq    #2,d0            ;Pterm ?
  49. prepare_flag:
  50.     seq    poolfix_flag
  51. go_os_gemdos:
  52.     move.l    8+nu_gemdos(pc),a0
  53.     jmp    (a0)
  54. ;
  55. ;
  56. compact_all_sub:
  57.     link    a6,#0
  58.     movem.l    d2-d7/a3-a5,-(sp)
  59.     suba.l    a5,a5
  60.     move.l    L6A0(pc),a0
  61.     move.l    (a0),a4
  62.     clr    d3
  63.     bra.s    L2FA
  64. ;
  65. L2B4:
  66.     tst.b    4(a4)
  67.     ble.s    L2F8
  68.     clr    d4
  69.     clr    d5
  70.     lea    6(a4),a3
  71.     bra.s    L2DE
  72. ;
  73. L2C4:
  74.     cmpi.l    #1,12(a3)
  75.     bne.s    L2D8
  76.     addq    #1,d4
  77.     move.l    a5,d0
  78.     bne.s    L2D8
  79.     move.l    a4,a5
  80.     move    d5,d6
  81. L2D8:
  82.     addq    #1,d5
  83.     adda    #$10,a3
  84. L2DE:
  85.     cmp    #4,d5
  86.     blt.s    L2C4
  87.     cmp    #4,d4
  88.     bne.s    L2F6
  89.     clr.b    4(a4)
  90.     cmp.l    a4,a5
  91.     bne.s    L2F4
  92.     suba.l    a5,a5
  93. L2F4:
  94.     bra.s    L2F8
  95. ;
  96. L2F6:
  97.     add    d4,d3
  98. L2F8:
  99.     move.l    (a4),a4
  100. L2FA:
  101.     move.l    a4,d0
  102.     bne.s    L2B4
  103.     cmp    #4,d3
  104.     blt    L4B4
  105.     move.l    a5,a4
  106.     move    d6,d7
  107. L30A:
  108.     addq    #1,d7
  109.     cmp    #4,d7
  110.     beq.s    L318
  111.     tst.b    4(a4)
  112.     bgt.s    L31C
  113. L318:
  114.     clr    d7
  115.     move.l    (a4),a4
  116. L31C:
  117.     move.l    a4,d0
  118.     beq.s    L33A
  119.     tst.b    4(a4)
  120.     ble.s    L30A
  121.     move    d7,d0
  122.     ext.l    d0
  123.     asl.l    #4,d0
  124.     add.l    a4,d0
  125.     move.l    d0,a0
  126.     cmpi.l    #1,18(a0)
  127.     beq.s    L30A
  128. L33A:
  129.     bra    L4AA
  130. ;
  131. L33E:
  132.     bra.s    L3A8
  133. ;
  134. L340:
  135.     lea    6(a5),a3
  136.     cmpi.l    #1,12(a3)
  137.     bne.s    L3AC
  138.     cmpi.l    #1,28(a3)
  139.     bne.s    L3AC
  140.     cmpi.l    #1,44(a3)
  141.     bne.s    L3AC
  142.     cmpi.l    #1,60(a3)
  143.     bne.s    L3AC
  144.     clr.b    4(a5)
  145.     moveq    #3,d6
  146. L372:
  147.     addq    #1,d6
  148.     cmp    #4,d6
  149.     beq.s    L380
  150.     tst.b    4(a5)
  151.     bgt.s    L384
  152. L380:
  153.     clr    d6
  154.     move.l    (a5),a5
  155. L384:
  156.     move.l    a5,d0
  157.     beq.s    L3A2
  158.     tst.b    4(a5)
  159.     ble.s    L372
  160.     move    d6,d0
  161.     ext.l    d0
  162.     asl.l    #4,d0
  163.     add.l    a5,d0
  164.     move.l    d0,a0
  165.     cmpi.l    #1,18(a0)
  166.     bne.s    L372
  167. L3A2:
  168.     move.l    a5,d0
  169.     beq    L4B4
  170. L3A8:
  171.     tst    d6
  172.     beq.s    L340
  173. L3AC:
  174.     bra.s    L412
  175. ;
  176. L3AE:
  177.     lea    6(a4),a3
  178.     cmpi.l    #1,12(a3)
  179.     beq.s    L416
  180.     cmpi.l    #1,28(a3)
  181.     beq.s    L416
  182.     cmpi.l    #1,44(a3)
  183.     beq.s    L416
  184.     cmpi.l    #1,60(a3)
  185.     beq.s    L416
  186.     moveq    #3,d7
  187. L3DC:
  188.     addq    #1,d7
  189.     cmp    #4,d7
  190.     beq.s    L3EA
  191.     tst.b    4(a4)
  192.     bgt.s    L3EE
  193. L3EA:
  194.     clr    d7
  195.     move.l    (a4),a4
  196. L3EE:
  197.     move.l    a4,d0
  198.     beq.s    L40C
  199.     tst.b    4(a4)
  200.     ble.s    L3DC
  201.     move    d7,d0
  202.     ext.l    d0
  203.     asl.l    #4,d0
  204.     add.l    a4,d0
  205.     move.l    d0,a0
  206.     cmpi.l    #1,18(a0)
  207.     beq.s    L3DC
  208. L40C:
  209.     move.l    a4,d0
  210.     beq    L4B4
  211. L412:
  212.     tst    d7
  213.     beq.s    L3AE
  214. L416:
  215.     cmp.l    a5,a4
  216.     beq.s    L47A
  217.     move    d6,d0
  218.     ext.l    d0
  219.     asl.l    #4,d0
  220.     add.l    a5,d0
  221.     move.l    d0,(sp)
  222.     addq.l    #6,(sp)
  223.     move    d7,d0
  224.     ext.l    d0
  225.     asl.l    #4,d0
  226.     add.l    a4,d0
  227.     move.l    d0,-(sp)
  228.     addq.l    #6,(sp)
  229.     bsr    compact_block_sub
  230.     addq.l    #4,sp
  231.     move    d7,d0
  232.     ext.l    d0
  233.     asl.l    #4,d0
  234.     add.l    a4,d0
  235.     move.l    d0,a0
  236.     move.l    #1,18(a0)
  237. L44A:
  238.     addq    #1,d6
  239.     cmp    #4,d6
  240.     beq.s    L458
  241.     tst.b    4(a5)
  242.     bgt.s    L45C
  243. L458:
  244.     clr    d6
  245.     move.l    (a5),a5
  246. L45C:
  247.     move.l    a5,d0
  248.     beq.s    L47A
  249.     tst.b    4(a5)
  250.     ble.s    L44A
  251.     move    d6,d0
  252.     ext.l    d0
  253.     asl.l    #4,d0
  254.     add.l    a5,d0
  255.     move.l    d0,a0
  256.     cmpi.l    #1,18(a0)
  257.     bne.s    L44A
  258. L47A:
  259.     addq    #1,d7
  260.     cmp    #4,d7
  261.     beq.s    L488
  262.     tst.b    4(a4)
  263.     bgt.s    L48C
  264. L488:
  265.     clr    d7
  266.     move.l    (a4),a4
  267. L48C:
  268.     move.l    a4,d0
  269.     beq.s    L4AA
  270.     tst.b    4(a4)
  271.     ble.s    L47A
  272.     move    d7,d0
  273.     ext.l    d0
  274.     asl.l    #4,d0
  275.     add.l    a4,d0
  276.     move.l    d0,a0
  277.     cmpi.l    #1,18(a0)
  278.     beq.s    L47A
  279. L4AA:
  280.     move.l    a5,d0
  281.     beq.s    L4B4
  282.     move.l    a4,d0
  283.     bne    L33E
  284. L4B4:
  285.     tst.l    (sp)+
  286.     movem.l    (sp)+,d3-d7/a3-a5
  287.     unlk    a6
  288.     rts
  289. ;
  290. ;
  291. compact_block_sub:
  292.     link    a6,#-4
  293.     movem.l    d6-d7/a3-a5,-(sp)
  294.     move.l    8(a6),a5
  295.     clr    d7
  296.     bra.s    L4F4
  297. ;
  298. L4CE:
  299.     move    d7,a0
  300.     adda.l    a0,a0
  301.     adda.l    a0,a0
  302.     adda.l    #L694,a0
  303.     move.l    (a0),-4(a6)
  304.     move.l    -4(a6),a3
  305.     move.l    (a3),a4
  306.     bra.s    L4EE
  307. ;
  308. ;
  309. L4E6:
  310.     cmp.l    a5,a4
  311.     beq.s    L500
  312.     move.l    a4,a3
  313.     move.l    (a3),a4
  314. L4EE:
  315.     move.l    a4,d0
  316.     bne.s    L4E6
  317.     addq    #1,d7
  318. L4F4:
  319.     cmp    #2,d7
  320.     blt.s    L4CE
  321.     move    #1,d0
  322.     bra.s    L52A
  323. L500:
  324.     move.l    L69C(pc),a0
  325.     cmp.l    8(a0),a5
  326.     bne.s    L514
  327.     move.l    L69C(pc),a0
  328.     move.l    12(a6),8(a0)
  329. L514:
  330.     move.l    12(a6),a0
  331.     move.l    a5,a1
  332.     rept    8            ;FX92:\
  333.     move    (a1)+,(a0)+        ;FX92: >This replaces loop below
  334.     endr                ;FX92:/ to protect d1 (also faster)
  335. ;;;    move    #7,d1        ;old:\ 
  336. ;;;L51E:            ;old: \ This loop crashed d1 for gemdos exit
  337. ;;;    move    (a1)+,(a0)+    ;old: / as would be legal only for 'Super'
  338. ;;;    dbf    d1,L51E        ;old:/  This could cause BOMBs...
  339.     move.l    12(a6),(a3)
  340.     clr    d0
  341. L52A:
  342.     tst.l    (sp)+
  343.     movem.l    (sp)+,d7-d7/a3-a5
  344.     unlk    a6
  345.     rts
  346. ;
  347. ;
  348. logout_cookies:            ;NB: This is a reset routine
  349.     clr.l    (_cookies).w
  350.     move.l    old_resvalid(pc),(resvalid).w
  351.     move.l    old_resvector(pc),(resvector).w
  352.     jmp    (a6)        ;NB: This is normal reset routine exit
  353. ;
  354. ;
  355. basepage_p:    dc.l    0
  356. L694:        dc.l    0
  357. L698:        dc.l    0
  358. L69C:        dc.l    0
  359. L6A0:        dc.l    0
  360. poolfix_flag:    dc.w    0
  361. old_resvector:    dc.l    0
  362. old_resvalid:    dc.l    0
  363. ;
  364. ;
  365. tsr_limit:
  366. ;
  367. ;
  368. already_in_s:
  369.     dc.b    'Pool patch already installed.',NUL
  370. not_needed_s:
  371.     dc.b    'Pool patch not needed in this TOS',NUL
  372. bad_linkage_s:
  373.     dc.b    'Something linked into the GEMDOS trap',CR,LF
  374.     dc.b    'without following XBRA rules.',CR,LF,NUL
  375. strange_TOS_s:
  376.     dc.b    "POOLFIX4 doesn't recognize this TOS.",NUL
  377.     even
  378. ;
  379. ;
  380. ;int    find_cookie(long id, void **ptr)  /* not found => 0 */
  381. find_cookie:
  382.     movem.l    d6-d7/a6,-(sp)
  383.     move.l    16(sp),d6
  384.     move.l    20(sp),a6
  385.     moveq    #0,d7
  386.     move.l    #1,-(sp)
  387.     move    #Super&$ff,-(sp)
  388.     trap    #1
  389.     tst.l    d0
  390.     bne.s    L55E
  391.     clr.l    2(sp)
  392.     move    #Super&$ff,(sp)
  393.     trap    #1
  394.     move.l    d0,d7
  395. L55E:
  396.     addq.l    #6,sp
  397.     move.l    (_cookies).w,a0
  398.     move.l    a0,d0
  399.     beq.s    L580
  400. L568:
  401.     move.l    (a0),d0
  402.     cmp.l    d0,d6
  403.     beq.s    L576
  404.     tst.l    d0
  405.     beq.s    L580
  406.     addq.l    #8,a0
  407.     bra.s    L568
  408. ;
  409. L576:
  410.     move.l    a6,d0
  411.     beq.s    L57E
  412.     move.l    4(a0),(a6)
  413. L57E:
  414.     moveq    #1,d0
  415. L580:
  416.     move.l    d0,d6
  417.     tst.l    d7
  418.     beq.s    L590
  419.     gemdos    Super!_ind,d7
  420. L590:
  421.     move.l    d6,d0
  422.     movem.l    (sp)+,d6-d7/a6-a6
  423.     rts
  424. ;
  425. ;
  426. error_exit:
  427.     bsr    Cconws_a0
  428.     lea    crlf_s(pc),a0
  429.     bsr    Cconws_a0
  430.     gemdos    Super!_ind,Saved_SSP(pc)
  431.     pea    $4C0001.l
  432.     trap    #1
  433.     dc.b    'J',$FC    ;    dc.w    $4AFC
  434. ;
  435. ;
  436. main:
  437.     move.l    4(sp),a6
  438. ;;;    clr.l    -(sp)        ;old:\  TOS-dependent...?
  439. ;;;    move    #$20,-(sp)    ;old: > Nonstandard call, ignored old SSP
  440. ;;;    trap    #1        ;old:/
  441.     gemdos    Super,!            ;FX92: Standard call
  442.     move.l    d0,Saved_SSP-bp(a6)    ;FX92: Saves old SSP for exit
  443.     gemdos    Sversion
  444.     lea    not_needed_s(pc),a0
  445.     cmp    #$1500,d0
  446.     bne    error_exit
  447.     lea    strange_TOS_s(pc),a0
  448.     move.l    (_sysbase).w,a1
  449.     move    2(a1),d0
  450.     cmp    #$104,d0        ;TOS 1.04 ?
  451.     beq.s    L40
  452.     cmp    #$106,d0        ;TOS 1.06 ?
  453.     bne    error_exit
  454. L40:
  455.     clr.l    -(sp)
  456.     move.l    #'_OOL',-(sp)
  457.     bsr    find_cookie        ;test for own 'cookie'
  458.     addq.l    #4,sp
  459.     lea    already_in_s(pc),a0
  460.     tst    d0
  461.     bne    error_exit
  462.     lea    bad_linkage_s(pc),a0
  463.     bsr    find_os_gemdos
  464.     tst.l    d0
  465.     bmi    error_exit
  466.     lea    strange_TOS_s(pc),a0
  467.     cmpi    #$2EBC,-1796(a2)
  468.     bne    error_exit
  469.     cmpi    #$2A79,-1102(a2)
  470.     bne    error_exit
  471.     clr.l    -(sp)
  472.     move.l    sp,a5
  473.     move.l    a5,-(sp)
  474.     clr.l    -(sp)
  475.     bsr    find_cookie        ;test for free 'cookie'
  476.     addq.l    #4,sp
  477.     addq.l    #8,(a5)
  478.     move.l    (a5),-(sp)
  479.     pea    tsr_limit(pc)
  480.     clr.l    -(sp)
  481.     move.l    #'_OOL',-(sp)
  482.     bsr    place_cookie
  483.     adda    #$10,sp
  484.     moveq    #0,d7
  485.     tst    d0
  486.     bmi.s    LB6
  487.     beq.s    LB6
  488.     move.l    (a5),d7
  489.     asl.l    #3,d7
  490. LB6:
  491.     bsr.s    find_os_gemdos
  492.     move.l    a2,a1
  493.     move.l    -1794(a1),a2
  494.     move.l    a2,L69C
  495.     move.l    a2,L694
  496.     addq.l    #4,a2
  497.     move.l    a2,L698
  498.     move.l    -1100(a1),L6A0
  499.     move.l    (ev_gemdos).w,8+nu_gemdos
  500.     move.l    #12+nu_gemdos,(ev_gemdos).w
  501.     lea    installed_s(pc),a0
  502.     bsr.s    Cconws_a0
  503.     move.l    #tsr_limit-bp,d0